iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

了解原理能夠讓我降低對這些科技未知的恐懼,並且幫助我更快的上手使用這些工具

SSH 連線簡單來說有三個步驟:

  1. 驗證身分
  2. 產生加密連線
  3. 用加密連線傳送資料

驗證身分

當我們輸入 ssh user@host 後,伺服器會先傳送一個隨機字串給我們,然後我們會用自己的私鑰對它簽名,簽完名後再回傳給伺服器,最後伺服器會從伺服器上的 ~/.ssh/authorized_keys 找出可以驗證這個簽名的公鑰,如果有找到符合的公鑰,那就驗證成功。

公鑰和私鑰是什麼?為什麼可以驗證身分?

非對稱式加密

這是一種神奇的加密方式,它的加密和解密的鑰匙是不同一把,用公鑰加密的資料只能用用私鑰解開,而私鑰只在擁有者收中,公鑰可以有很多人擁有,現在主流的非對稱加密有兩種 rsa、ed25519,也可以說是兩種產生公私鑰對的方式,以下是一個比較簡單的例子:

  1. Alice 某天想傳一則訊息 Bob,但是又不想被 Carol 看到內容
  2. 這時 Bob 就用非對稱加密算法產生了一對 公鑰 73私鑰 137
  3. Bob 將 公鑰 73 用一個安全的方式交給 Alice
  4. Alice 用 公鑰 73訊息 1234 加密,73 x 1234 = 90082,獲得 密文 90082
  5. Alice 將 密文 90082 用不安全的方式傳給 Bob,這時 Carol 看了看密文完全不知道在寫什麼
  6. Bob 用 私鑰 137 解密傳過來的 密文 90082,137 x 90082 = 12341234,獲得 原始訊息 1234

事實上 rsa、ed25519 不是一般的乘法運算,但其實滿像的,因為他們也符合 私鑰 x 公鑰 x 訊息 = 訊息 (x 是某種運算方式,也許是乘法運算,也許是矩陣運算) 的運算方式,不過運作方式更複雜、更難以理解、也更安全。

數位簽章

為了方便理解,數位簽章可以想像成就是把非對稱加密反過來用,用私鑰加密後,任何人都能用公鑰解密,藉此就能知道訊息是本人傳送的。

不過實際運作方式並不會直接用私鑰對資料加密,因為用非對稱加密加密大檔案速度會很慢,所以通常都是先對資料做雜湊,再用私鑰對雜湊值加密,對方收到資料後也對資料做雜湊,並且用公鑰對加密的雜湊值解密,最後將兩個湊值比對,如果相同那表示傳訊息過來的是本人,而且沒有被竄改。


產生加密連線

在第一次連線時伺服器會將伺服器的公鑰傳送給我,現在有兩對公私鑰對,一對是我的、一對是伺服器的,現在伺服器上有我的公鑰和伺服器的私鑰,我的電腦中有伺服器的公鑰和我的私鑰。

接著會利用這四把鑰匙來產生一對對稱式金鑰,用於 AES 加解密,然後在 AES 加密的情況下傳送資料,因為 非對稱式加密對稱式加密 慢的非常非常多,如果要傳送比較大的資料那可能算半天都算不出密文。

Diffie-Hellman 算法

SSH 是利用 Diffie-Hellman 來產生對稱式金鑰的,不過在交流的過程中加入了身分驗證,確認訊息的傳送者,具體流程也是滿複雜的,以下是拿掉身分驗證後的例子:

  1. Alice 和 Bob 先約定好一個初始值 53 (這個值是共有的)
  2. Alice 隨機產生一個值 19 (這個值只有 Alice 知道),然後將它和 53 做運算,19 x 53 = 1007
  3. Bob 也做同樣的動作,隨機產生一個值 17,17 x 53 = 901
  4. 兩個人將結果交換
  5. Alice 再用 19 對 Bob 傳過來的 901 做運算,19 x 901 = 17119
  6. Bob 也做同樣的動作,將 Alice 傳送過來的 1007 做運算,17 x 1007 = 17119
  7. 最後兩個人都有 17119 這個值,並且中間過程沒任何人可以拿到這個值

這樣 Alice 和 Bob 都能用 17119 這個值對訊息加解密,並且沒有人能知道他們在傳些什麼東西。


用加密連線傳送資料

最後一步最簡單了,就是用 AES 加解密傳送資料,在傳送訊息前先加密,傳送訊息後再解密。

對稱式加密

對稱式加密的鑰匙是同一把鑰匙,並且是將資料切小小塊加密的,這樣子可以邊傳送邊加密訊息,或是讓全部的區塊同時加密,不浪費每一分每一秒的時間。

這應該不需要例子了吧?(偷懶一下


最後附上 OpenSSH 規格書
http://www.openssh.com/specs.html

如果有哪邊講錯的請大力指正,偷偷跟你說我其實看不太懂規格書在寫什麼,欸嘿

話說這不就是最近很紅的無密碼登入嗎


上一篇
【Walking Skeleton】Day05 - 在 AWS 上買(租)一台 EC2 主機
下一篇
【Walking Skeleton】Day07 - 確認 SSH 首次連線的指紋 Fingerprint
系列文
嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言